/*
 * Tree-sitter.cj 函数指针调用包装器
 * 
 * 本文件提供C包装函数，用于调用动态加载的Tree-sitter语言函数
 */

#include <stddef.h>

// Tree-sitter语言函数类型定义
typedef const void* (*TSLanguageFunction)(void);

/**
 * 调用Tree-sitter语言函数的包装器
 * 
 * @param func_ptr 函数指针（从dlsym获得）
 * @return TSLanguage指针，失败时返回NULL
 */
const void* call_language_function_wrapper(void* func_ptr) {
    if (func_ptr == NULL) {
        return NULL;
    }
    
    // 将void*转换为函数指针类型
    TSLanguageFunction lang_func = (TSLanguageFunction)func_ptr;
    
    // 调用函数并返回结果
    return lang_func();
}

/**
 * 验证函数指针是否有效
 * 
 * @param func_ptr 要验证的函数指针
 * @return 1表示有效，0表示无效
 */
int validate_function_pointer(void* func_ptr) {
    return (func_ptr != NULL) ? 1 : 0;
}

/**
 * 获取函数指针的地址（用于调试）
 * 
 * @param func_ptr 函数指针
 * @return 函数指针的地址值
 */
unsigned long get_function_address(void* func_ptr) {
    return (unsigned long)func_ptr;
}
